//
//  HomeViewController.swift
//  FWSinaWeibo
//
//  Created by 范伟 on 16/2/21.
//  Copyright © 2016年 FanWei. All rights reserved.
//

import UIKit

private let reuseID = "homeCell"

class HomeViewController: RootViewController {
    
    private lazy var dataList = [Int]()

    override func viewDidLoad() {
        //初始化刷新控件
        initRefreshControl()
        super.viewDidLoad()
        tableView?.registerClass(UITableViewCell.self, forCellReuseIdentifier: reuseID)
        visitorView?.setupInformation(message: "关注一些人，回这里看看有什么惊喜")
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // On iOS 6.0 it will no longer clear the view by default.
        // 在 iOS 6.0 之后，默认不再清除 view，再 iOS 6.0 之前，收到内存警告后
        // `如果视图当前没有显示`，会被从内存中销毁，下次需要使用的时候，会再次调用 loadView 创建 view
        // 只需要释放能够被再次创建的资源，例如：从网络加载的数据数组
        // 图像的内存管理 SDWebImage 自行管理，会释放内存中的图像，下次使用，会重新从磁盘缓存加载，如果瓷盘缓存没有，下载图片
        print("home的window:" + "\(view.window)")
        guard let _ = view.window else {
            dataList.removeAll()
            tableView?.reloadData()
            return
        }
    }
    
    override func loadData() {
        //判断是否是上拉刷新：如果上拉刷新动画启动，认为是上拉刷新
        let isPullup = refreshControl?.isPullupRefresh ?? false //Returns the receiver is animation.
//        if !isPullup {//上拉刷新显示刷新控件
//            Call this method when an external event source triggers a programmatic refresh of your table. For example, if you use an NSTimer object to refresh the contents of the table view periodically, you would call this method as part of your timer handler. This method updates the state of the refresh control to reflect the in-progress refresh operation. When the refresh operation ends, be sure to call the `endRefreshing` method to return the control to its default state.
        refreshControl?.beginRefreshing()
        //        }
        //默认起始索引值
        let defaultIndex = 100
        //模拟异步加载数据
        dispatch_async(dispatch_get_global_queue(0, 0)) {
            //这是一个同步的方法，不执行完成，不会执行后续代码
            //实际开发过程中不可使用
            let when = dispatch_time(DISPATCH_TIME_NOW, Int64(Double(NSEC_PER_MSEC) * 3))
            dispatch_after(when, dispatch_get_main_queue()) {
                //记录数组的第一个元素，第一次初始空数组的时候置为起始索引值
                let pulldownIndex = self.dataList.first ?? defaultIndex//first:Returns the first element of self, or nil if self is empty.
                let pullupIndex = self.dataList.last ?? 0 //空替换后常量为必选项
                var arr = [Int]()
                //如果上拉顺序加载数据，如果下拉逆序加载数据
                if isPullup {//上拉
                    for i in 0..<10 {
                        arr.append(pullupIndex - i - 1)
                    }
                    self.dataList += arr//数据追加到数组末尾
                } else {//下拉
                    NSLog("下拉刷新")
                    for i in (0..<10).reverse() {
                        arr.append(pulldownIndex + 1 + i)
                    }
                    //下拉刷新插入到现有数据前面
                    self.dataList = arr + self.dataList
                }
                
                //关闭刷新控件
                //数据加载完成后要停止上拉刷新控件动画
                self.refreshControl?.endRefreshing()
                //刷新表格
                self.tableView?.reloadData()
            }
        }
    }
}

/// MARK: - UITableViewDataSource
extension HomeViewController {

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return dataList.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(reuseID, forIndexPath: indexPath)
        cell.textLabel?.text = dataList[indexPath.row].description
        return cell
    }
}